#define _GNU_SOURCE
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <dirent.h>
#include <string.h>
#include <linux/input.h>
#include "font.h"

int chumo(void *map_addr, font *f)
{

    int fd = open("/dev/input/event0", O_RDWR);
    if (fd < 0)
    {
        perror("触摸屏打开失败\n");
        return -1;
    }

    int x = 0, y = 0;
    int t_x = 0, t_y = 0;

    char pass[1024] = {0};
    char password[1024] = {0};
    int pass_size = 0;
    int password_sizd = 0;
    int in_password_area = 0;
    int in_pass_area = 0;

    while (1)
    {
        struct input_event ev;
        read(fd, &ev, sizeof(ev));

        if (ev.type == EV_ABS && ev.code == ABS_X)
        {
            x = ev.value * 800 / 1024;
        }

        if (ev.type == EV_ABS && ev.code == ABS_Y)
        {
            y = ev.value * 480 / 600;
        }

        if (ev.type == EV_KEY && ev.code == BTN_TOUCH)
        {
            printf("TOUCH = %d\n", ev.value);

            if (ev.value == 1)
            {
                if (x >= 140 && x < 380 && y >= 200 && y <= 230 && !in_password_area)
                {
                    in_pass_area = 1;
                    printf("进入账号输入模式\n");
                    printf("权限%d %d\n",in_pass_area,in_password_area);
                }
                if (x >= 140 && x < 380 && y >= 240 && y <= 270 && !in_pass_area)
                {
                    in_password_area = 1;
                    printf("进入密码输入模式\n");
                    printf("权限%d %d\n",in_pass_area,in_password_area);
                }
            }
            else if (ev.value == 0 && in_pass_area && !in_password_area) // 触摸释放且在密码输入模式
            {
                // 处理数字键输入
                if (y >= 160 && y < 280) // 数字键1-9区域
                {
                    if (x >= 680 && x < 720)
                        pass[pass_size] = (y < 200) ? '1' : (y < 240) ? '4'
                                                                      : '7';
                    else if (x >= 720 && x < 760)
                        pass[pass_size] = (y < 200) ? '2' : (y < 240) ? '5'
                                                                      : '8';
                    else if (x >= 760 && x < 800)
                        pass[pass_size] = (y < 200) ? '3' : (y < 240) ? '6'
                                                                      : '9';

                    if (pass[pass_size] != 0 && pass_size < 1024 - 1)
                        pass_size++;
                }
                // 处理数字键0和退格
                else if (y >= 280 && y < 320)
                {
                    if (x >= 760 && x < 800)
                        pass[pass_size] = '0';
                    else if (x >= 680 && x < 760 && pass_size > 0)
                        pass[--pass_size] = '\0'; // 退格键

                    if (pass[pass_size] != 0 && pass_size < 1024 - 1)
                        pass_size++;
                }

                // 更新显示
                fontSetSize(f, 24);
                bitmap *bm3 = createBitmapWithInit(240, 30, 4, 0x0000ff00);
                if (bm3)
                {
                    fontPrint(f, bm3, 0, 0, pass, 0xff000000, 200);
                    show_font_to_lcd(map_addr, 140, 200, bm3);
                    destroyBitmap(bm3);
                }

                // 检查是否要退出密码输入模式
                if ((x > 800 || x <= 680) && (y > 320 || y <= 160))
                {
                    in_pass_area = 0;
                    printf("退出账号输入模式\n");
                    printf("权限%d %d\n",in_pass_area,in_password_area);
                }
            }
            else if (ev.value == 0 && in_password_area && !in_pass_area) // 触摸释放且在密码输入模式
            {
                // 处理数字键输入
                if (y >= 160 && y < 280) // 数字键1-9区域
                {
                    if (x >= 680 && x < 720)
                        password[password_sizd] = (y < 200) ? '1' : (y < 240) ? '4'
                                                                              : '7';
                    else if (x >= 720 && x < 760)
                        password[password_sizd] = (y < 200) ? '2' : (y < 240) ? '5'
                                                                              : '8';
                    else if (x >= 760 && x < 800)
                        password[password_sizd] = (y < 200) ? '3' : (y < 240) ? '6'
                                                                              : '9';

                    if (password[password_sizd] != 0 && password_sizd < 1024 - 1)
                        password_sizd++;
                }
                // 处理数字键0和退格
                else if (y >= 280 && y < 320)
                {
                    if (x >= 760 && x < 800)
                        password[password_sizd] = '0';
                    else if (x >= 680 && x < 760 && password_sizd > 0)
                        password[--password_sizd] = '\0'; // 退格键

                    if (password[password_sizd] != 0 && password_sizd < 1024 - 1)
                        password_sizd++;
                }

                // 更新显示
                fontSetSize(f, 24);
                bitmap *bm4 = createBitmapWithInit(240, 30, 4, 0x0000ff00);
                if (bm4)
                {
                    fontPrint(f, bm4, 0, 0, password, 0xff000000, 200);
                    show_font_to_lcd(map_addr, 140, 240, bm4);
                    destroyBitmap(bm4);
                }

                // 检查是否要退出密码输入模式
                if ((x > 800 || x <= 680) && (y > 320 || y <= 160))
                {
                    in_password_area = 0;
                    printf("退出密码输入模式\n");
                    printf("权限%d %d\n",in_pass_area,in_password_area);
                }
            }
        }

        if (x >= 200 && x < 280 && y >= 280 && y < 320)
        {
            if (!strstr("12345678", pass))
            {
                printf("账号错误\n");
            }
            else
            {
                if (!strstr("12345678", password))
                {
                    printf("密码错误\n");
                }
                else
                {
                    printf("登录成功！\n");
                }
            }
        }

        printf("X=%d, Y=%d\n", x, y);
    }
    close(fd);
}